package com.start.form.engine.core.listener;

import com.alibaba.fastjson2.JSONObject;
import com.start.common.dataRule.StartQueryWrapper;
import com.start.common.event.StartBaseEvent;
import com.start.form.engine.core.entity.StartFormConfig;

public interface StartTableDataListener extends StartBaseEvent {
    /**
     * 获取需要监听的数据表所属组别 多个请用英文逗号隔开
     *
     * @return
     */
    default String getGroupCode() {
        return null;
    }

    /**
     * 获取需要监听的数据表 多个请用英文逗号隔开
     *
     * @return
     */
    default String getTableName() {
        return null;
    }

    /**
     * 保存数据前
     *
     * @param formConfig 数据配置
     * @param data       数据
     */
    void beforeSaveData(StartFormConfig formConfig, JSONObject data);

    /**
     * 保存数据后
     *
     * @param formConfig 表配置
     * @param data       保存的数据
     */
    void afterSaveData(StartFormConfig formConfig, JSONObject data);

    /**
     * 修改数据前
     *
     * @param formConfig 表配置
     * @param data       数据
     * @param wrapper    条件
     */
    void beforeUpdate(StartFormConfig formConfig, JSONObject data, StartQueryWrapper wrapper);

    /**
     * 修改数据后
     *
     * @param formConfig 表配置
     * @param data       数据
     * @param wrapper    条件
     */
    void afterUpdate(StartFormConfig formConfig, JSONObject data, StartQueryWrapper wrapper);

    /**
     * 删除数据前
     *
     * @param formConfig 表配置
     * @param wrapper    条件
     */
    void beforeDelete(StartFormConfig formConfig, StartQueryWrapper wrapper);

    /**
     * 删除数据后
     *
     * @param formConfig 表配置
     * @param wrapper    条件
     */
    void afterDelete(StartFormConfig formConfig, StartQueryWrapper wrapper);

    /**
     * 数据查询前
     *
     * @param formConfig
     * @param wrapper
     */
    void beforeQueryData(StartFormConfig formConfig, StartQueryWrapper wrapper);

    /**
     * 数据查询后
     *
     * @param formConfig
     * @param wrapper
     * @param records
     */
    void afterQueryData(StartFormConfig formConfig, StartQueryWrapper wrapper, JSONObject... records);


    /**
     * 查询数量之前
     *
     * @param formConfig   数据表配置
     * @param queryWrapper 查询条件
     */
    void beforeCount(StartFormConfig formConfig, StartQueryWrapper queryWrapper);


    /**
     * 查询数量之后
     *
     * @param formConfig   数据表配置
     * @param queryWrapper 查询条件
     */
    void afterCount(StartFormConfig formConfig, StartQueryWrapper queryWrapper);
}
